import os

import cv2
import numpy as np
from PIL import Image
import glob

# 获取当前目录下所有jpg/png图片（支持中文文件名）
image_files = glob.glob("./*.jpg") + glob.glob("./*.png") + glob.glob("./*.jpeg")

for img_path in image_files:
    try:
        # 先用PIL读取（完美支持中文路径）
        # 方法2：使用 PIL 读取后转换（推荐）
        img_pil = Image.open(img_path)
        # 转换为 OpenCV 格式（BGR）
        image = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)

        # 定义锐化滤波器
        # 定义更大的锐化滤波器
        sharpen_kernel = np.array([[-1, -1, -1, -1, -1],
                                   [-1, -1, -1, -1, -1],
                                   [-1, -1, 25, -1, -1],
                                   [-1, -1, -1, -1, -1],
                                   [-1, -1, -1, -1, -1]])
        # 多次应用滤波器
        image = cv2.filter2D(image, -1, sharpen_kernel)
        max_size = 650
        # 计算新图像的尺寸
        # 获取图片的原始宽度和高度
        original_height, original_width = image.shape[:2]
        # 计算等比例缩放后的宽度和高度
        if original_width > original_height:
            new_width = max_size
            new_height = int(original_height * (max_size / original_width))
        else:
            new_height = max_size
            new_width = int(original_width * (max_size / original_height))

        # 使用双三次插值进行图像缩放
        resized_image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_CUBIC)
        # 生成输出文件名（在原文件名前加"processed_"）
        dirname = os.path.dirname(img_path)
        filename = os.path.basename(img_path)
        output_path = os.path.join(dirname, f"processed_{filename}")

        # 保存处理后的图像到当前目录
        cv2.imwrite(output_path, resized_image)
        print(f"处理完成，已保存到: {output_path}")

    except Exception as e:
        print(f"读取失败: {img_path}, 错误: {str(e)}")